package domain;


import java.util.UUID;

/**
 * Die Klasse Lehrveranstaltung ist eine abstrakte Klasse mit den Child-Klassen Uebung- und Vorlesung. Sie enthaelt alle wesentlichen Informationen zu Lehrveranstaltungen 
 * an der Universtaet in Vawistadt: Name, Teilnehmeranzahl, Typ der Lehrveranstaltung, Dozent, benoetigte Ausruestung. 
 * 
 * @author Lena Schenk
 * @version 14122014
 */
public abstract class Lehrveranstaltung
{
	private UUID Id;
	
	private int no;
	
    /**
     *  Name der Lehrveranstaltung
     */
    private String name;
   
   /**
     * Typ der Lehrveranstaltung 
     */
    protected LehrveranstaltungType lehrveranstaltungType;

    /** 
     * Dozent der Lehrveranstaltung
     */
    private Dozent dozent;
    
      /**
     * Anzahl der Teilnehmer
     */
    private int teilnehmer;
     
    /**
     * benoetigtes Equipment fuer die Lehveranstaltung
     */
    private Equipment equipment;

    /**
     * Die Konstruktormethode weisst dem Lehrveranstaltungs-Objekt alle grundlegenden Informationen zu
     * 
     * @param  name                     Name der Lehrveranstaltung
     * @param  lehrveranstaltungsType   Typ der Lehrveranstaltung 
     * @param  dozent					 Name des Dozenten der Lehrveranstaltung 
     * @param  teilnehmer               Teilnehmer der Lehrveranstaltung
     * @param  equipment                benoetigte Ausruestung fuer die Lehrveranstaltung
     */
    
    public Lehrveranstaltung(int no, String name, LehrveranstaltungType lehrveranstaltungType, Dozent dozent,  int teilnehmer, Equipment equipment) {
        this.Id = UUID.randomUUID();
    	this.no = no;
    	this.name = name;
        this.lehrveranstaltungType = lehrveranstaltungType;
        this.dozent = dozent;
        this.teilnehmer = teilnehmer;
        this.equipment = equipment;
    }
    
    /**
     * @return      Die Methode gibt den Namen der Lehrveranstaltung als String zurück
     */
    public String getName() {
        return name;
    }
    
    /**
     * Die Methode setzt den Namen der Lehrveranstaltung neu 
     * @param name   Neuer Name der Lehrveranstaltung 
     */
    public void setName(String name) {
        this.name = name;
    }
    
    /**
     * @return      Die Methode gibt den Typ der Lehrveranstaltung (Vorlesung oder Uebung) zurueck
     */
    public LehrveranstaltungType getLehrveranstaltungType() {
        return lehrveranstaltungType;
    }
    
    /**
     * Die Methode setzt den Typ der Lehrveranstaltung neu
     * @param lehrveranstaltungsType    Neuer Typ der Lehrveranstaltung
     */
    public void setLehrveranstaltungType(LehrveranstaltungType lehrveranstaltungType) {
        this.lehrveranstaltungType = lehrveranstaltungType;
    }
    
    /**
     * @return    Die Methode gibt den Dozenten als String zurueck
     */
    public Dozent getDozent() {
        return dozent;
    }
    
    /**
     * Die Methode setzt den Dozenten der Lehrveranstaltung neu 
     * @param dozent    Neuer Dozent fuer die Lehrveranstaltung 
     */
    public void setDozent(Dozent dozent) {
        this.dozent = dozent;
    }

        /**
     * @return      Die Methode gibt die Anzahl der Teilnehmer als ganze Zahl (int) zurueck
     */
    public int getTeilnehmer() {
        return teilnehmer;
    }
    
    /**
     * Die Methode setzt die Teilnehmeranzahl neu
     * @param teilnehmer   Neue Anzahl von Teilnehmern 
     */
    public void setTeilnehmer(int teilnehmer) {
        this.teilnehmer = teilnehmer;
    }
    
    /**
     * @return     Diese Methode gibt das für eine Lehrveranstaltung benoetigtes Equipment zurueck
     */
    public Equipment getEquipment() {
        return equipment;
    }
    
    /**
     * Die Methode setzt das fuer eine Veranstaltung benoetigtes Equipment neu 
     * @param equipment      Neues Equipment, das fuer eine Lehrveranstaltung benoetigt wird
     */
    public void setEquipment(Equipment equipment) {
        this.equipment = equipment;
    }

    @Override
	public String toString() {
		return this.lehrveranstaltungType + " [no=" + no + ", name=" + name  + ", dozent=" + dozent.getName()
				+ ", equipment=" + equipment + ", teilnehmer=" + teilnehmer + "]";
	}
    
    public int getLvNo(){
    	return this.no;	
    }
}
